package com.sybil.spa.dominio;

import java.io.Serializable;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.JoinColumns;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Transient;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

@Entity
@Table(name = "SPA_CORREOS_HISTORICO_FLUJO")
public class CorreoSolicitud implements Serializable {

   private static final long serialVersionUID = 1L;
   protected CorreoSolicitudPK llave;
   private String claveUsuario;
   private String email;
   private String estatus;
   private String comentarios;
   private String usuarioCreo;
   private String usuarioModif;
   private DetalleSolicitud detalleSolicitud;
   private Usuario usuario;

   public CorreoSolicitud() {
   }

   public CorreoSolicitud(CorreoSolicitudPK correoHistoricoPK) {
      this.llave = correoHistoricoPK;
   }

   public CorreoSolicitud(String claveFlujo, int numeroSolicitud, int numeroDetalle, int numeroCorreo) {
      this.llave = new CorreoSolicitudPK(claveFlujo, numeroSolicitud, numeroDetalle, numeroCorreo);
   }

   public CorreoSolicitud(CorreoSolicitudPK llave, String claveUsuario,
           String correo, String estatus, String usuarioCreo) {
      this.llave = llave;
      this.claveUsuario = claveUsuario;
      this.email = correo;
      this.estatus = estatus;
      this.usuarioCreo = usuarioCreo;
   }

   @EmbeddedId
   public CorreoSolicitudPK getLlave() {
      return llave;
   }

   @Transient
   public Usuario getUsuario() {
      return usuario;
   }

   @Basic(optional = false)
   @NotNull
   @Size(min = 1, max = 15)
   @Column(name = "DECF_USUARIO_AD")
   public String getClaveUsuario() {
      return claveUsuario;
   }

   @Basic(optional = false)
   @NotNull
   @Size(min = 1, max = 250)
   @Column(name = "DECF_EMAIL")
   public String getEmail() {
      return email;
   }

   @Basic(optional = false)
   @NotNull
   @Size(min = 1, max = 1)
   @Column(name = "DECF_ESTATUS")
   public String getEstatus() {
      return estatus;
   }

   @Size(max = 500)
   @Column(name = "DECF_COMENTARIOS")
   public String getComentarios() {
      return comentarios;
   }

   @Basic(optional = false)
   @Column(name = "DECF_USUARIO_CREO")
   public String getUsuarioCreo() {
      return usuarioCreo;
   }

   @Column(name = "DECF_USUARIO_MODIF")
   public String getUsuarioModif() {
      return usuarioModif;
   }

   @JoinColumns({
      @JoinColumn(name = "DECF_FLUJ_CLAVE", referencedColumnName = "DEHF_FLUJ_CLAVE", insertable = false, updatable = false),
      @JoinColumn(name = "DECF_HIFL_NUMERO", referencedColumnName = "DEHF_HIFL_NUMERO", insertable = false, updatable = false),
      @JoinColumn(name = "DECF_DEHF_NUMERO", referencedColumnName = "DEHF_NUMERO", insertable = false, updatable = false)})
   @ManyToOne(optional = false)
   public DetalleSolicitud getDetalleSolicitud() {
      return detalleSolicitud;
   }

   public void setLlave(CorreoSolicitudPK llave) {
      this.llave = llave;
   }

   public void setUsuario(Usuario usuario) {
      if (usuario != null) {
         this.claveUsuario = usuario.getClave();
      }
      this.usuario = usuario;
   }

   public void setClaveUsuario(String claveUsuario) {
      this.claveUsuario = claveUsuario;
   }

   public void setEmail(String email) {
      this.email = email;
   }

   public void setEstatus(String estatus) {
      this.estatus = estatus;
   }

   public void setComentarios(String comentarios) {
      this.comentarios = comentarios;
   }

   public void setUsuarioCreo(String usuarioCreo) {
      this.usuarioCreo = usuarioCreo;
   }

   public void setUsuarioModif(String usuarioModif) {
      this.usuarioModif = usuarioModif;
   }

   public void setDetalleSolicitud(DetalleSolicitud detalleSolicitud) {
      this.detalleSolicitud = detalleSolicitud;
   }

   @Override
   public int hashCode() {
      int hash = 0;
      hash += (llave != null ? llave.hashCode() : 0);
      return hash;
   }

   @Override
   public boolean equals(Object object) {
      if (!(object instanceof CorreoSolicitud)) {
         return false;
      }
      CorreoSolicitud other = (CorreoSolicitud) object;
      if ((this.llave == null && other.llave != null) || (this.llave != null && !this.llave.equals(other.llave))) {
         return false;
      }
      return true;
   }

   @Override
   public String toString() {
      return "CorreoSolicitud[ llave=" + llave + " ]";
   }
}
